A virtual assistant is a software agent used to perform automated tasks, sometimes referred to as skills, abilities, or actions. A virtual assistant may accept an instruction from a user via voice commands and/or text commands. For example, a virtual assistant may receive a voice command to obtain a weather forecast through a smart speaker or another microphone-enabled network host. Alternatively, the virtual assistant may receive the command from a user via text commands, such as through a chat interface or short message service (SMS) message. Responsive to receiving the command, the virtual assistant may obtain the weather forecast from an associated network service and present the weather forecast to the requesting user.
Many virtual assistant providers have released virtual assistant frameworks, which are platforms that empower developers to create new skills for a virtual assistant. A virtual assistant framework generally includes a collection of application programming interfaces (APIs), code samples, libraries, documentation, and other tools to facilitate the creation of new skills. For example, the virtual assistant framework may provide tools for converting an audio stream to words and performing natural language processing on the audio stream. Thus, the virtual assistant framework allows developers to quickly expose services through a natural language interface.
Many virtual assistant platforms are not cross-compatible with other virtual assistant platforms. As a result, developers typically implement separate skills for each platform through which the developer would like to expose a service. For example, a developer may create one skill to expose a weather forecast through one vendor's line of smart speakers. The developer may then create a separate skill to expose the weather forecast through another vendor's line of smart speakers. This approach may be time-consuming and gives rise to a multiple-maintenance scenario. If a service is updated or expanded, then each separate skill must also be updated for each supported platform. Also, skills that expose the same underlying service may diverge in behavior from one platform to another. Different skills may have different user interfaces, different abilities, different invocations, and/or different bugs. This divergent behavior complicates usability, documentation, manageability, and performance.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.